//
//  XGHeaderView.m
//  XGTableView的用法详解
//
//  Created by 小果 on 16/7/5.
//  Copyright © 2016年 小果. All rights reserved.
//

#import "XGHeaderView.h"
#import "XGExamModel.h"

#define XGImageCount 5
@interface XGHeaderView()<UIScrollViewDelegate>
/**
 *  UIScrollView
 */
@property (weak, nonatomic) IBOutlet UILabel *content;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
/**
 *  分页
 */
@property (weak, nonatomic) IBOutlet UIPageControl *pageCont;
/**
 *  定时器
 */
@property (nonatomic, strong) NSTimer *timer;
@property (weak, nonatomic) IBOutlet UILabel *aboveLabel;
@property (nonatomic, strong) NSArray *dictArr;
@end
@implementation XGHeaderView
#pragma mark - 加载数据
-(NSArray *)dictArr{
    if (nil == _dictArr){
        _dictArr = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageLabel.plist" ofType:nil]];
    }
    return _dictArr;
}

/**
 *  快速创建一个headerView
 */
+(instancetype)loadHeaderView
{
    return [[[NSBundle mainBundle] loadNibNamed:@"XGHeaderView" owner:nil options:nil] lastObject];
}
#pragma mark - 图片轮播器
-(void)awakeFromNib{
    // 固定的参数
    CGFloat imageW = self.scrollView.frame.size.width;
    CGFloat imageH = self.scrollView.frame.size.height;
    CGFloat imageY = 0;
    
    // 将图片添加到ScrollView中
    for (int i = 0; i < XGImageCount; i++) {
        // 创建UIImageView
        UIImageView *imageView = [[UIImageView alloc] init];
        // 设置imageView的frame
        CGFloat imageX = i * imageW;
        imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);
        // 取出数组中的每个字典
        NSDictionary *dict = self.dictArr[i];
        // 设置图片
        NSString *imageName = [NSString stringWithFormat:@"%d.jpg",i + 1];
        imageView.image = [UIImage imageNamed:imageName];
        // 设置图片上的文字
        
        UILabel *labek = [[UILabel alloc] init];
        labek.textAlignment = NSTextAlignmentLeft;
        labek.numberOfLines = 0;
        labek.backgroundColor = [UIColor yellowColor];
        labek.textColor = [UIColor blueColor];
        labek.text = dict[@"str"];
        labek.alpha = 0.7;
        labek.frame = CGRectMake(0, 0, imageW, imageH);
        self.aboveLabel = labek;
        [imageView addSubview:labek];
        
        
        [self.scrollView addSubview:imageView];
    }
    // 设置文字的颜色
    self.content.textColor = XGRandomColor;
    // 设置代理
    self.scrollView.delegate = self;
    
    // 设置ScrollView的内容
    self.scrollView.contentSize = CGSizeMake(XGImageCount * imageW, 0);
    // 隐藏ScrollView的水平滚动条
    self.scrollView.showsHorizontalScrollIndicator = NO;
    // 设置是否分页
    self.scrollView.pagingEnabled = YES;
    // 设置总页数
    self.pageCont.numberOfPages = XGImageCount;
    
    // 添加一个定时器
    [self addTimer];
}

#pragma mark 添加定时器
-(void)addTimer
{
    //创建定时器
    //作用每隔一段时间后去执行某个方法
    //<#(NSTimeInterval)#> 代表间隔的时间<每隔多长时间去调用
    // <#(nonnull id)#> 代表一个对象
    // selector:<#(nonnull SEL)#>  选择器 调用一个方法
    // userInfo:<#(nullable id)#> 开启定时器时,如果有一些特殊配置,可以通过它传递
    // repeats:<#(BOOL)#> 代表是否重复执行
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
    
    //发送消息的循环机制
    //获取到主线程中的消息
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
#pragma mark 移除定时器
- (void)removeTimer
{
    //让定时器无效
    //当让定时停止时,在去调用 fire 是无法重新开启的
    //如果要重新开启,只能重新创建
    [self.timer invalidate];
    //让定时器正式释放
    self.timer = nil;
}
#pragma mark 下一页
- (void)nextImage
{
    // 增加pageControl的页码
    NSInteger page = 0;
    if (self.pageCont.currentPage == XGImageCount - 1){
        page = 0;
    }else{
        page = self.pageCont.currentPage + 1;
    }
    
    // 计算滚动的范围
    CGFloat offSetX = page * self.scrollView.frame.size.width;
    CGFloat offSetY = 0;
    //    self.scrollView.contentOffset = CGPointMake(offSetX, offSetY);
    CGPoint offSet = CGPointMake(offSetX, offSetY);
    
    // 设置动画
    [self.scrollView setContentOffset:offSet animated:YES];
    
}

#pragma mark - 计算滚动到第几页
/**
 *  计算滚动到第几页
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 根据scrollView滚动的位置来计算当前应该显示第几页
    CGFloat scrollW = scrollView.frame.size.width;
    
    int page = (scrollView.contentOffset.x + scrollW * 0.5)/ scrollW;
    
    self.pageCont.currentPage = page;
}
#pragma mark 开始拖拽时调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    // 停止定时器（定时器一旦停止就不能再用了）
    [self removeTimer];
}
#pragma mark 结束拖拽时调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // 开始定时器
    [self addTimer];
}


@end
